package com.xaicode.algorithm.leetcode._1_100;

import com.xaicode.utils.Random;
import lombok.extern.slf4j.Slf4j;

/**
 * <a href="https://leetcode-cn.com/problems/reverse-integer">整数反转</a>
 *
 * <p>给你一个 32 位的有符号整数 <code>x</code> ，返回将 <code>x</code> 中的数字部分反转后的结果。</p>
 *
 * <p>如果反转后整数超过 32 位的有符号整数的范围 <code>[−2<sup>31</sup>,  2<sup>31 </sup>− 1]</code> ，就返回 0。</p>
 * <strong>假设环境不允许存储 64 位整数（有符号或无符号）。</strong>
 *
 * <p> </p>
 *
 * <p><strong>示例 1：</strong></p>
 *
 * <pre>
 * <strong>输入：</strong>x = 123
 * <strong>输出：</strong>321
 * </pre>
 *
 * <p><strong>示例 2：</strong></p>
 *
 * <pre>
 * <strong>输入：</strong>x = -123
 * <strong>输出：</strong>-321
 * </pre>
 *
 * <p><strong>示例 3：</strong></p>
 *
 * <pre>
 * <strong>输入：</strong>x = 120
 * <strong>输出：</strong>21
 * </pre>
 *
 * <p><strong>示例 4：</strong></p>
 *
 * <pre>
 * <strong>输入：</strong>x = 0
 * <strong>输出：</strong>0
 * </pre>
 *
 * <p> </p>
 *
 * <p><strong>提示：</strong></p>
 *
 * <ul>
 * 	<li><code>-2<sup>31</sup> <= x <= 2<sup>31</sup> - 1</code></li>
 * </ul>
 *
 * @author beborn xaicode@sina.com
 */
@Slf4j
public class _7_Easy_ReverseInteger {

    public static void main(String[] args) {
        int x = Random.getRandom().nextInt();
        log.info("int range: {} ~ {}", Integer.MIN_VALUE, Integer.MAX_VALUE);
        log.info("param: {}", x);

        int result = new _7_Easy_ReverseInteger().reverseInteger(x);
        log.info("result is {}: {}", result != 0, result);
    }

    /**
     * 执行耗时:1 ms,击败了100.00% 的Java用户
     * 内存消耗:35.4 MB,击败了73.58% 的Java用户
     */
    public int reverseInteger(int x) {
        long res = 0;
        // 考虑负数情况，所以这里条件为: x != 0
        while (x != 0) {
            // x % 10 仅获取 x 的个位数字
            res = res * 10 + (x % 10);
            // 小数点向左移动一位
            x /= 10;
        }
        return res < Integer.MIN_VALUE || res > Integer.MAX_VALUE ? 0 : (int) res;
    }

}
